/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package rna;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author thay
 */
public class Arquivo {

    private BufferedReader dados;
    private BufferedReader nomes;
    public List<Double[]> conjuntoDeDados = new ArrayList<Double[]>();

    public Arquivo() {

        try {

            dados = new BufferedReader(new FileReader("breast-cancer-wisconsin.data"));
            nomes = new BufferedReader(new FileReader("breast-cancer-wisconsin.names"));

        } catch (FileNotFoundException ex) {
            Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void leArquivo() {

        String linha = null;
        String valores[] = new String[11];

        try {
            while ((linha = dados.readLine()) != null) {

                if (!linha.contains("?")) {             // Exclui todas as linhas com '?';

                    valores = linha.split(",");

                    Double[] temp = new Double[11];
                    temp = stringParaDouble(valores);

    // Substitui os valores '4' e '2', do arquivo, para '1' e '0', respectivamente;
                    switch (Integer.parseInt(valores[10])) {
                        case 4:
                            valores[10] = "1";
                            break;
                        case 2:
                            valores[10] = "0";
                            break;
                    }
                    conjuntoDeDados.add(stringParaDouble(valores));                   
                }
            }

        normalizar(conjuntoDeDados);

        } catch (IOException ex) {
            Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private Double[] stringParaDouble(String[] s) {

        Double[] temp = new Double[s.length - 1];

        for (int i = 1; i < s.length; i++) {
            temp[i - 1] = Double.parseDouble(s[i]);
        }
        return temp;
    }

    private void normalizar(List<Double[]> v)
    {
        Double max;

        for (int i = 0; i < v.get(0).length; i++) {     // Percorre a linha de dados;

            max = v.get(i)[0];

            for (int j = 0; j < v.size(); j++) {        // Percorre a coluna de dados;
                if (max < v.get(j)[i]) {
                    max = v.get(j)[i];
                }
            }

            for (int count = 0; count < v.size(); count++) {
                v.get(count)[i] = v.get(count)[i] / max;
            }
        }
    }
}
